<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 字符串中嵌入变量 反斜杠转义 需要将变量名写在${}之中。
        let obj = {name:"Bob", time : "today"}
        console.log(`Hello ${obj.name}, how are you ${obj.time}?`)

        // 模板字符串之中还能调用函数 如果大括号中的值不是字符串，将按照一般的规则转为字符串。比如，大括号中是一个对象，将默认调用对象的toString方法。
        fn =()=>{
            return 777;
        }
        console.log(`666 ${fn()} 888`)
        //如果大括号内部是一个字符串，将会原样输出。
        console.log(`Hello ${'World'}`)

        //模板字符串写成了一个函数的返回值。执行这个函数，就相当于执行这个模板字符串了
        let sayHello = (name)=>`Hello ${name}`
        console.log(sayHello('Jack'))

        //实例方法：includes(),startsWith(),endswith()
        // includes()、starsWith()、endsWith()
        let sentence = 'Hello World!'
        // 支持开始搜索的位置 n表示开始搜索的位置 特别的endsWith针对的是前面n个字符
        console.log(sentence.includes('rld',7))
        console.log(sentence.endsWith('Wo',8))
        console.log(sentence.startsWith('World',6))
        // repeat方法返回一个新字符串，表示将原字符串重复n次
        //alert('x'.repeat(3)) // "xxx"
        //alert('hello'.repeat(2)) // "hellohello"
        //alert('na'.repeat(0))
        //'na'.repeat(NaN) // ""
        // 如果repeat的参数是负数或者Infinity，会报错。

        // padStart(),padEnd()头部补齐和尾部补齐
        //指定要多长的字符 要用什么字符串去补充
        //如果省略第二个参数，默认使用空格补全长度。
        // 可以用来生成01信号
        '666'.padStart(4,'OKK')
        'abc'.padEnd(7,'233')
        'vv'.padEnd(8)
        // 提示字符串格式
        '12'.padStart(10, 'YYYY-MM-DD')
        '2009-03'.padEnd(10,'YYYY-MM-DD')
        
        const example = ' ooo    '
        console.log(example.trim())
        console.log(example.trimStart())//等同于trimLeft()
        console.log(example.trimEnd())//等同于trimRight()

        // RegExp构造函数
        var regex = new RegExp('xzy','i')
        var regex = new RegExp('xzy','i')
        //等同
        var regex = /xyz/i
        
            // ES5的resource属性
            // 返回正则表达式的正文

            // ES6的flags属性
            // 返回正则表达式的修饰符
        // ES6提供了二进制和八进制写法
        console.log(0b111110111===503)
        console.log(0o767===503)
        // 如果要将0b和0o前缀的字符串数值转为十进制，要使用Number方法。
        console.log(Number('0b111') )
        console.log(Number('0o10') )
        
        console.log(Number.isFinite(15))//判断是不是一个数字 如果参数类型不是数值，Number.isFinite一律返回false
        console.log(Number.isNaN(NaN))//Number.isNaN()用来检查一个值是否为NaN。 如果参数类型不是NaN，Number.isNaN一律返回false 
        console.log(Number.isInteger(25.5))//Number.isInteger()用来判断一个数值是否为整数。超过精度可能会误判
        // ES5写法
        console.log(parseInt('66.9'))
        console.log(parseFloat('55.07'))
        //ES6写法
        console.log(Number.parseInt('66.9'))
        console.log(Number.parseFloat('55.07'))
        //逐步减少全局性方法，使得语言逐步模块化。
        //Number.parseInt === parseInt // true
        //Number.parseFloat === parseFloat // true
        
        //安全整数 javascript能够准确表示的整数范围在 -2^53~2^53
        // Number.isSafeInteger()判断一个整数是否落在这个范围之内
        // Number.isSafeInteger('a') // false
        // Number.isSafeInteger(null) // false
        // Number.isSafeInteger(NaN) // false
        // Number.isSafeInteger(Infinity) // false
        // Number.isSafeInteger(-Infinity) // false

        // Number.isSafeInteger(3) // true
        // Number.isSafeInteger(1.2) // false
        
        // Math.trunc去除一个数的小数部分,返回整数部分
        console.log(Math.trunc(5.2))
        console.log(Math.trunc(undefined))//对于空值额无法截取的值，返回NaN

        // 参数为正数，返回+1；
        // 参数为负数，返回-1；
        // 参数为 0，返回0；
        // 参数为-0，返回-0;
        // 其他值，返回NaN。
        console.log(Math.sign(-5),Math.sign(5),Math.sign(0),Math.sign(-0),Math.sign(NaN))
        
        // Math.cbrt()方法用于计算一个数的立方根。
        // Math.hypot方法返回所有参数的平方和的平方根。
        console.log(Math.hypot(3,4))

        // ES6 新增了 4 个对数相关方法。
        // Math.expm1()、Math.log1p()、Math.log10、Math.log2()
        // Math.sinh(x) 返回x的双曲正弦（hyperbolic sine）
        // Math.cosh(x) 返回x的双曲余弦（hyperbolic cosine）
        // Math.tanh(x) 返回x的双曲正切（hyperbolic tangent）
        // Math.asinh(x) 返回x的反双曲正弦（inverse hyperbolic sine）
        // Math.acosh(x) 返回x的反双曲余弦（inverse hyperbolic cosine）
        // Math.atanh(x) 返回x的反双曲正切（inverse hyperbolic tangent）

        // 新增指数运算符号** **=
        let a = 1.5;
        a **= 2;
        // 等同于 a = a * a;

        let b = 4;
        b **= 3;
        // 等同于 b = b * b * b;

        //新增数据类型BigInt大整数任何位数都可以精确表示  BigInt和普通整数是两种值并不相等 要加上后缀
        console.log(BigInt(888)) //参数如果是小数也会报错 后面会自动加上n
        // 可以使用!、Boolean()、Number()和String()这三个方法，将 BigInt 可以转为布尔值、数值和字符串类型。

    </script>
</body>
</html>